typedef unsigned short uint16_t;
typedef unsigned char uint8_t;

typedef union Unaligned16a {
    uint16_t u;
    uint8_t b[2];
} __attribute__((packed)) Unaligned16a;

typedef union __attribute__((packed)) Unaligned16b {
    uint16_t u;
    uint8_t b[2];
} Unaligned16b;

extern void foo(void) __attribute__((stdcall));
void __attribute__((stdcall)) foo(void) {}

/* The actual attribute isn't important, must just be
   parsable.  */
#define ATTR __attribute__((__noinline__))
int ATTR actual_function() { return 42; }

extern int printf(const char*, ...);
int main() {
    void* function_pointer = &actual_function;

    int a = ((ATTR int (*)(void))function_pointer)();
    printf("%i\n", a);

    /* In the following we once misparsed 'ATTR *' is a btype
       and hence the whole type was garbled.  */
    int b = ((int(ATTR*)(void))function_pointer)();
    printf("%i\n", b);

    return 0;
}
